package com.cskayan.javase.object._6clone.string;

/**
 * String类比较特殊,它的对象是不可变的
 * 不可变对象指的是除非销毁对象,不然对象的状态不会改变的对象,指的是:
 *      1.对象中的基本数据类型成员变量取值不可变
 *      2.对象中的引用数据类型的成员变量引用,不能再指向新的对象
 *      3.而且这个引用所指向的对象也应该是不可变
 * 满足这些条件的对象才能称之为不可变对象
 * String类是典型的不可变对象,final修饰value数组表示引用不能指向新的对象
 *      而且value是private修饰,且类中没有提供任何手段和方法来修改value
 *      最后String类还是final修饰的
 *      总之,是没有办法改变String对象的状态的
 * 如果在代码中,通过引用修改字符串内容,那么这个引用一定是指向一个新对象,不可能在原先对象的基础上进行修改!!!
 *
 * String这种字符串对象,存储字符串,value数组就全部用来存放字符
 *      既没有长的,空余的位置,更不可能少
 *      value数组的长度就是字符串的长度
 * 比如"abc"字符串对象, value数组就是装'a','b','c'
 *
 * @since 14:55
 * @author wuguidong@cskaoyan.onaliyun.com
 */
public class Demo {
    public static void main(String[] args) {
        String str = "123";
        /*
            str开始指向的"123"对象,是不可变的,不可能修改字符串内容的
            不可变对象指的是堆上的对象不可变
            但是栈上的引用仍然可以改变,仍然可以指向新的对象
            String引用仍然可以指向新对象
         */
        str = "abcd";
    }
}
